package com.hsy.service.impl;

import com.hsy.dao.UserDao;
import com.hsy.dao.impl.UserDaoImpl;
import com.hsy.pojo.User;
import com.hsy.service.UserService;

import java.time.LocalDateTime;
import java.util.List;

public class UserServiceImpl implements UserService {
    UserDao userDao = new UserDaoImpl();
    /**
     * 检查用户账号、用户昵称是否 不存在
     * @param user
     * @return 不存在返回true、存在返回false
     */
    @Override
    public boolean checkUserNotExist(User user) {
        if(null != userDao.selectUserByNumber(user.getUserNumber())) {
            // 能查到对象，说明已存在，返回false
            return false;
        }else if (null != userDao.selectUserByNick(user.getUserName())) {
            // 能查到对象，说明已存在，返回false
            return false;
        }else {
            // 否则说明没找到，返回true
            return true;
        }
    }
    /**
     * 新增用户
     *
     * @param user
     * @return
     */
    @Override
    public int insert(User user) {
        // 补充额外值
        user.setCreateTime(LocalDateTime.now());
        return userDao.insert(user);
    }

    @Override
    public User checkLogin(User user) {
        if (checkUserNotExist(user)) {
            // 如果用户不存在为真，说明没有用户，返回false
            return null;
        }
        if (!userDao.selectUserPasswordByNumber(user.getUserNumber()).equals(user.getPassword())) { // 字符串比较用equals
            // 如果通过用户账号查找到的密码和当前传来的这个用户密码不一致，说明密码错误
            return null;
        }
        // 上面检查完了，说明都没问题，返回数据库中的这个对象，可以登入
        return userDao.selectUserByNumber(user.getUserNumber());
    }

    /**
     * 查询用户列表 返回
     * @return 用户列表
     */
    @Override
    public List<User> selectUserList() {
        return userDao.selectUserList();
    }

    @Override
    public User selectUserByUserId(Long userId) {
        return userDao.selectUserByUserId(userId);
    }

    @Override
    public int update(User user) {
        return userDao.update(user);
    }

    @Override
    public int delete(Long userId) {
        return userDao.delete(userId);
    }

    @Override
    public List<User> selectUserListByNameAndStatus(String nickName, String status) {
        if (nickName.isEmpty()) {
            // 如果名字为空就只根据状态查
            if (status.isEmpty()) {
                // 状态也为空就相当于没有查询条件，则全查
                return userDao.selectUserList();
            }else {
                // 否则根据状态来查询用户列表
                return userDao.selectUserListByStatus(status);
            }
        }else {
            // 否则名字不为空，那就要看看状态
            if (status.isEmpty()) {
                // 状态为空，那就只根据名字查（模糊查询）
                return userDao.selectUserListByName(nickName);
            }else {
                // 状态和名字都不为空，根据名字和状态一起查
                return userDao.selectUserListByNameAndStatus(nickName, status);
            }
        }
    }

    @Override
    public List<User> selectUserList(Integer startIndex, Integer targetTotal) {
        return userDao.selectUserList(startIndex, targetTotal);
    }

    @Override
    public Integer getTotalUserCount() {
        List<User> users = userDao.selectUserList();
        return users.size();
    }
}
